<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        // // 以后但凡遇到 {} 这种叫字面量写法，他本质其实写的是 new Object
        // // 就像遇到 [] 这种也是字面量写法，他本质写的是 new Array
        // // 那就意味着，每次遇到 {} 或 [] 其实都开启了一个新的堆空间
        // // 然后对象、数组之间的比较是比较地址，地址不一样得到false
        // // 所以 {} == {}  得到false
        // console.log( { name: 'jack', age: 16 } == { name: 'jack', age: 16 } ) // false
        // console.log( {} == {} )  // false


        // indexOf: 查找元素在不在数组里，如果在得到下标，不在得到-1
        // 所以反过来说，如果是-1代表不在，不等于-1代表在
        // let arr = [10, 20, 30, 40, 50]
        // console.log(arr.indexOf(30)) // 2
        // console.log(arr.indexOf(33)) // -1


        // es6里提供了一个新的方法叫 `findIndex` 作用跟 `indexOf` 是一样的，都是判断在不在数组里，在得到下标，不在得到-1
        // 他其实跟forEach很像，都能遍历元素,不同点在于：forEach没有返回值，findIndex有返回值
        // 如果findIndex有某次返回true，就不会往下遍历，整个findIndex的返回值就是当前返回true时的下标
        // 如果一次都没返回true，得到-1
        // 那换句话说，如果找到某个元素就要记得return true，一直都没return true就代表没找到，没找到得到-1
        // let idx = arr.findIndex(v => {
        //     console.log(v)
        //     if (v == 30) {
        //         return true
        //     }
        // })
        // console.log(idx)

        // indexOf用在基本类型的数组里，非常好用，直接可以得到效果
        // 如果是复杂类型的数组，要用findIndex才好用
        let list = [
            { id: 101, name: '吃饭' },
            { id: 102, name: '睡觉' },
            { id: 103, name: '打豆豆' },
        ]

        // 我要找id为102的对象所在的下标
        // 因为每当遇到{}都相当于new Object，那就是新的地址（新的对象）
        // let idx = list.indexOf({ id: 102, name: '睡觉' })
        // console.log(idx) // -1

        // 这时候用的findIndex非常好
        // let idx = list.findIndex( v => {
        //     if (v.id == 102) {
        //         return true
        //     }
        // })

        // 找id为102的元素，找到会得到下标，没找到得到-1
        let idx = list.findIndex( v => v.id == 102)
        console.log(idx)


        // find方法跟findIndex效果一样，但是find的返回值是找到了就返回找到的元素，没找到返回undefined
        let res1 = list.find( v => v.id == 102)
        console.log(res1) // 返回的就是找到的这个元素
    </script>
</body>

</html>